## Введение в алгоритмы

<details>
<summary>
<strong>Значения функции</strong>
</summary><br/>

 [`Решение`](/sprint_1/1_functionsResult.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/A/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/107335505/)

```
Вася делает тест по математике: вычисляет значение функций в различных точках. 
Стоит отличная погода, и друзья зовут Васю гулять. 
Но мальчик решил сначала закончить тест и только после этого идти к друзьям. 
К сожалению, Вася пока не умеет программировать. Зато вы умеете. 
Помогите Васе написать код функции, вычисляющей y = ax2 + bx + c. 
Напишите программу, которая будет по коэффициентам a, b, c и числу x выводить значение функции в точке x.
```


#### Формат ввода
```
На вход через пробел подаются целые числа a, x, b, c.
В конце ввода находится перенос строки.
```

#### Формат вывода
```
Выведите одно число — значение функции в точке x.
```

#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        -8 -5 -2 7<br>
    </td>
    <td valign="top">
        -183<br>
    </td>
  </tr>
</tbody></table>

#### Пример 2
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
       8 2 9 -10<br>
    </td>
    <td valign="top">
        40<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Чётные и нечётные числа</strong>
</summary><br/>

[`Решение`](/sprint_1/2_evenOdds.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/B/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/107338450/)

```
Представьте себе онлайн-игру для поездки в метро: игрок нажимает на кнопку, 
и на экране появляются три случайных числа. Если все три числа оказываются 
одной чётности, игрок выигрывает.
Напишите программу, которая по трём числам определяет, выиграл игрок или нет.
```

#### Формат ввода
```
В первой строке записаны три случайных целых числа a, b и c. 
Числа не превосходят 10^9 по модулю.
```

#### Формат вывода
```
Выведите «WIN», если игрок выиграл, и «FAIL» в противном случае.
```

#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        1 2 -3<br>
    </td>
    <td valign="top">
        FAIL<br>
    </td>
  </tr>
</tbody></table>

#### Пример 2
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
       7 11 7<br>
    </td>
    <td valign="top">
        WIN<br>
    </td>
  </tr>
</tbody></table>

#### Пример 3
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        6 -2 0<br>
    </td>
    <td valign="top">
        WIN<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Соседи</strong>
</summary><br/>

[`Решение`](/sprint_1/3_neighbours.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/C/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/107344288/)
```
Дана матрица. Нужно написать функцию, которая для элемента возвращает 
всех его соседей. Соседним считается элемент, находящийся от текущего 
на одну ячейку влево, вправо, вверх или вниз. Диагональные элементы 
соседними не считаются.
Например, в матрице A соседними элементами для (0, 0) будут 2 и 0. 
А для (2, 1) –— 1, 2, 7, 7.
```
#### Формат ввода
```
В первой строке задано n — количество строк матрицы. Во второй — 
количество столбцов m. Числа m и n не превосходят 1000. В следующих n 
строках задана матрица. Элементы матрицы — целые числа, по модулю не 
превосходящие 1000. В последних двух строках записаны координаты элемента, 
соседей которого нужно найти. Индексация начинается с нуля.
```

#### Формат вывода
```
Напечатайте нужные числа в возрастающем порядке через пробел.
```

#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        4<br>
        3<br>
        1 2 3<br>
        0 2 6<br>
        7 4 1<br>
        2 7 0<br>
        3<br>
        0<br>
    </td>
    <td valign="top">
        7 7<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Хаотичность погоды</strong>
</summary><br/>

[`Решение`](/sprint_1/4_weatherChaotic.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/D/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/107349195/)
```
Метеорологическая служба вашего города решила исследовать погоду новым способом.
Под температурой воздуха в конкретный день будем понимать максимальную
температуру в этот день.
Под хаотичностью погоды за n дней служба понимает количество дней, в которые 
температура строго больше, чем в день до (если такой существует) и в день после 
текущего (если такой существует). Например, если за 5 дней максимальная 
температура воздуха составляла `[1, 2, 5, 4, 8]` градусов, то хаотичность за 
этот период равна 2: в 3-й и 5-й дни выполнялись описанные условия.

Определите по ежедневным показаниям температуры хаотичность погоды за этот период.
Заметим, что если число показаний n=1, то единственный день будет хаотичным.
```
#### Формат ввода
```
В первой строке дано число n –— длина периода измерений в днях, 1 ≤ n≤ 105. 
Во второй строке даны n целых чисел –— значения температуры в каждый из n дней. 
Значения температуры не превосходят 273 по модулю.
```
#### Формат вывода
```
Выведите единственное число — хаотичность за данный период.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        7<br>
        -1 -10 -8 0 2 0 5<br>
    </td>
    <td valign="top">
        3<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Самое длинное слово</strong>
</summary><br/>

[`Решение`](/sprint_1/5_theLongestWord.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/E/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/107350977/)
```
Чтобы подготовиться к семинару, Гоше надо прочитать статью по эффективному 
менеджменту. Так как Гоша хочет спланировать день заранее, ему необходимо 
оценить сложность статьи.
Он придумал такой метод оценки: берётся случайное предложение из текста и в нём 
ищется самое длинное слово. Его длина и будет условной сложностью статьи.
```
#### Формат ввода
```
В первой строке дана длина текста L (1 ≤ L ≤ 105).
В следующей строке записан текст, состоящий из строчных латинских букв и 
пробелов. Слово —– последовательность букв, не разделённых пробелами. Пробелы 
могут стоять в самом начале строки и в самом её конце. Текст заканчивается 
переносом строки, этот символ не включается в число остальных L символов.
```
#### Формат вывода
```
В первой строке выведите самое длинное слово. Во второй строке выведите его 
длину. Если подходящих слов несколько, выведите то, которое встречается раньше.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        19<br>
        i love segment tree<br>
    </td>
    <td valign="top">
        7<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Палиндром</strong>
</summary><br/>

[`Решение`](/sprint_1/6_palindrom.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/F/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/107415536/)

```
Помогите Васе понять, будет ли фраза палиндромом. Учитываются только буквы и 
цифры, заглавные и строчные буквы считаются одинаковыми.

Решение должно работать за O(N), где N — длина строки на входе.
```
#### Формат ввода
```
В единственной строке записана фраза или слово. Буквы могут быть только 
латинские. Длина текста не превосходит 20000 символов.
Фраза может состоять из строчных и прописных латинских букв, цифр, 
знаков препинания.
```
#### Формат вывода
```
Выведите «True», если фраза является палиндромом, и «False», если не является.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        A man, a plan, a canal: Panama<br>
    </td>
    <td valign="top">
        True<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Работа из дома</strong>
</summary><br/>
  
[`Решение`](/sprint_1/7_remoteWork.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/G/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/108309836/)
```
Вася реализовал функцию, которая переводит целое число из десятичной системы в 
двоичную. Но, кажется, она получилась не очень оптимальной.
Попробуйте написать более эффективную программу.
Не используйте встроенные средства языка по переводу чисел в бинарное 
представление.
```

#### Формат ввода
```
На вход подаётся целое число в диапазоне от 0 до 10000.
```
#### Формат вывода
```
Выведите двоичное представление этого числа.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        5<br>
    </td>
    <td valign="top">
        101<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Двоичная система</strong>
</summary><br/>

[`Решение`](/sprint_1/8_binarySystem.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/H/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/110784175/) 
```
Тимофей записал два числа в двоичной системе счисления и попросил Гошу 
вывести их сумму, также в двоичной системе. Встроенную в язык 
программирования возможность сложения двоичных чисел применять нельзя. 
Помогите Гоше решить задачу.

Решение должно работать за O(N), где N –— количество разрядов максимального 
числа на входе.
```
#### Формат ввода
```
Два числа в двоичной системе счисления, каждое на отдельной строке. 
Длина каждого числа не превосходит 10 000 символов.
```
#### Формат вывода
```
Одно число в двоичной системе счисления.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        1010<br>
        1011<br>
    </td>
    <td valign="top">
        10101<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Степень четырёх</strong>
</summary><br/>

[`Решение`](/sprint_1/9_powerOfFour.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/I/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/110784852/)
```
Напишите программу, которая определяет, будет ли положительное целое число 
степенью четвёрки.

Подсказка: степенью четвёрки будут все числа вида 4n, 
где n – целое неотрицательное число.
```
#### Формат ввода
```
На вход подаётся целое число в диапазоне от 1 до 10000.
```
#### Формат вывода
```
Выведите «True», если число является степенью четырёх, 
«False» –— в обратном случае.
```

#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        15<br>
    </td>
    <td valign="top">
        False<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Факторизация</strong>
</summary><br/>

[`Решение`](/sprint_1/10_factorizing.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/J/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/110786319/)
```
Основная теорема арифметики говорит: любое число раскладывается на 
произведение простых множителей единственным образом, с точностью до их 
перестановки. Например:
Число 8 можно представить как 2 × 2 × 2.
Число 50 –— как 2 × 5 × 5 (или 5 × 5 × 2, или 5 × 2 × 5). 
Три варианта отличаются лишь порядком следования множителей.
Разложение числа на простые множители называется факторизацией числа.
Напишите программу, которая производит факторизацию переданного числа.
```
#### Формат ввода
```
В единственной строке дано число n (2 ≤ n ≤ 109), которое нужно факторизовать.
```
#### Формат вывода
```
Выведите в порядке неубывания простые множители, на которые раскладывается число n.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        8<br>
    </td>
    <td valign="top">
        2 2 2<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Списочная форма</strong>
</summary><br/>

[`Решение`](/sprint_1/11_listedForm.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/K/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/110793551/)
```
Вася просил Аллу помочь решить задачу. На этот раз по информатике.
Для неотрицательного целого числа X списочная форма –— это массив его 
цифр слева направо. К примеру, для 1231 списочная форма будет `[1,2,3,1]`. 
На вход подается количество цифр числа Х, списочная форма неотрицательного 
числа Х и неотрицательное число K. Числа К и Х не превосходят 10000.

Нужно вернуть списочную форму числа X + K.
```
#### Формат ввода
```
В первой строке — длина списочной формы числа X. На следующей строке — 
сама списочная форма с цифрами записанными через пробел.
В последней строке записано число K, 0 ≤ K ≤ 10000.
```
#### Формат вывода
```
Выведите списочную форму числа X+K.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        4<br>
        1 2 0 0<br>
        34<br>
    </td>
    <td valign="top">
        1 2 3 4<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Лишняя буква</strong>
</summary><br/>

[`Решение`](/sprint_1/12_extraLetter.js) | [`Условие`](https://contest.yandex.ru/contest/22449/problems/L/) | [`Отчет`](https://contest.yandex.ru/contest/22449/run-report/110795258/)
```
Васе очень нравятся задачи про строки, поэтому он придумал свою. 
Есть 2 строки s и t, состоящие только из строчных букв. Строка t 
получена перемешиванием букв строки s и добавлением 1 буквы в случайную 
позицию. Нужно найти добавленную букву.
```
#### Формат ввода
```
На вход подаются строки s и t, разделённые переносом строки. 
Длины строк не превосходят 1000 символов. Строки не бывают пустыми.
```
#### Формат вывода
```
Выведите лишнюю букву.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        abcd<br>
        abcde<br>
    </td>
    <td valign="top">
        e<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Ближайший ноль | Финальная задача №1</strong>
</summary><br/>

[`Решение`](/sprint_1/finals/taskA.js) | [`Условие`](https://contest.yandex.ru/contest/22450/problems/A/) | [`Отчет`](https://contest.yandex.ru/contest/22450/run-report/107483869/)
```
Тимофей ищет место, чтобы построить себе дом. Улица, на которой он хочет жить, 
имеет длину n, то есть состоит из n одинаковых идущих подряд участков. 
Каждый участок либо пустой, либо на нём уже построен дом.
Общительный Тимофей не хочет жить далеко от других людей на этой улице. 
Поэтому ему важно для каждого участка знать расстояние до ближайшего пустого 
участка. Если участок пустой, эта величина будет равна нулю — расстояние 
до самого себя.
Помогите Тимофею посчитать искомые расстояния. Для этого у вас есть карта 
улицы. Дома в городе Тимофея нумеровались в том порядке, в котором строились, 
поэтому их номера на карте никак не упорядочены. 
Пустые участки обозначены нулями.
```
#### Формат ввода
```
В первой строке дана длина улицы —– n (1 ≤ n ≤ 10^6). 
В следующей строке записаны n целых неотрицательных чисел — номера домов и 
обозначения пустых участков на карте (нули). Гарантируется, что в 
последовательности есть хотя бы один ноль. Номера домов (положительные числа) 
уникальны и не превосходят 10^9.
```
#### Формат вывода
```
Для каждого из участков выведите расстояние до ближайшего нуля. 
Числа выводите в одну строку, разделяя их пробелами.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        5<br>
        0 1 4 9 0<br>
    </td>
    <td valign="top">
        0 1 2 1 0<br>
    </td>
  </tr>
</tbody></table>

</details>

---

<details>
<summary>
<strong>Ловкость рук | Финальная задача №2</strong>
</summary><br/>

[`Решение`](/sprint_1/finals/taskB.js) | [`Условие`](https://contest.yandex.ru/contest/22450/problems/B/) | [`Отчет`](https://contest.yandex.ru/contest/22450/run-report/107483770/)
```
Игра «Тренажёр для скоростной печати» представляет собой поле из клавиш 4x4. 
В нём на каждом раунде появляется конфигурация цифр и точек. На клавише 
написана либо точка, либо цифра от 1 до 9.
В момент времени t игрок должен одновременно нажать на все клавиши, на которых 
написана цифра t. Гоша и Тимофей могут нажать в один момент времени на k 
клавиш каждый. Если в момент времени t нажаты все нужные клавиши, то игроки 
получают 1 балл.
Найдите число баллов, которое смогут заработать Гоша и Тимофей, если будут 
нажимать на клавиши вдвоём.
```
#### Формат ввода
```
В первой строке дано целое число k (1 ≤ k ≤ 5).
В четырёх следующих строках задан вид тренажёра –— по 4 символа в каждой 
строке. Каждый символ —– либо точка, либо цифра от 1 до 9. Символы одной 
строки идут подряд и не разделены пробелами.
```
#### Формат вывода
```
Выведите единственное число –— максимальное количество баллов, которое смогут 
набрать Гоша и Тимофей.
```
#### Пример
<table><tbody>
  <tr>
    <td><b>Ввод</b></td>
    <td><b>Вывод</b></td>
  </tr>
  <tr>
    <td valign="top">
        3<br>
        1231<br>
        2..2<br>
        2..2<br>
        2..2<br>
    </td>
    <td valign="top">
        2<br>
    </td>
  </tr>
</tbody></table>

</details>
